package com.sky.wonderrelationship.mapper;

import com.sky.wonderrelationship.entity.Field;
import com.sky.wonderrelationship.entity.FieldShipDetail;
import com.sky.wonderrelationship.entity.FieldShipDetailList;
import com.sky.wonderrelationship.entity.TreeRelationshipsNode;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 功能描述
 *
 * @author: lx
 * @date: 2023年04月14日 14:34
 */
@Mapper
public interface FieldShipMapper {
    //获取所有的表和字段
    @MapKey("id")
    List<Field> getAllField();


    //模糊根据db、表名、字段名称获取
    List<Field> fuzzySearchField(@Param("db") String db, @Param("table") String table,@Param("field") Long field);


    //根据字段id获取字段相关的数据库和表名
    List<Field> getFieldById(@Param("fieldId") Long fieldId);


    //根据数据库名和表名获取表的所有字段及其字段id
    List<FieldShipDetailList> searchFieldId(@Param("db") String db, @Param("table") String table, @Param("field") Long field);


    /********* relationShip相关的   *******/

    //根据字段ID获取关联关系
    List<FieldShipDetail> getRelationshipByfieldId(@Param("fieldId") Long fieldId);

    //插入关系表中的关系
    int insertFieldShip(@Param("field_id1") Long field_id1, @Param("field_id2") Long field_id2, @Param("note") String note);

    //删除关系表中的所有关系
    int deleteFieldShip(@Param("id") Long id);

    //检查两个字段间是否有联系
    List<FieldShipDetail> checkShipBy2FieldID(@Param("fieldId1") Long fieldId1,@Param("fieldId2") Long fieldId2);


    //根据一个field的ID来查询它所有的关联(只根据一个!!!!!!!)
    List<Field> queryShipByFieldID(@Param("fieldId1") Long fieldId1);


    List<TreeRelationshipsNode> queryTableShip(@Param("db") String db, @Param("table") String table, @Param("field") String field);

    List<TreeRelationshipsNode> queryStartTableShipAllField(@Param("db") String db, @Param("table") String table, @Param("field") String field);

}
